package com.ruoyi.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import com.ruoyi.mapper.MobileUserMapper;
import com.ruoyi.domain.MobileUser;
import com.ruoyi.service.IMobileUserService;
import com.ruoyi.common.core.utils.StringUtils;

/**
 * 手机端用户Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-01-20
 */
@Service
public class MobileUserServiceImpl implements IMobileUserService 
{
    @Autowired
    private MobileUserMapper mobileUserMapper;

    /**
     * 查询手机端用户
     * 
     * @param id 手机端用户主键
     * @return 手机端用户
     */
    @Override
    public MobileUser selectMobileUserById(Integer id)
    {
        return mobileUserMapper.selectMobileUserById(id);
    }

    /**
     * 根据手机号查询用户
     * 
     * @param phone 手机号
     * @return 手机端用户
     */
    @Override
    public MobileUser selectMobileUserByPhone(String phone)
    {
        return mobileUserMapper.selectMobileUserByPhone(phone);
    }

    /**
     * 用户登录
     * 
     * @param phone 手机号
     * @param password 密码
     * @return 登录结果信息
     */
    @Override
    public MobileUser login(String phone, String password)
    {
        // 参数校验
        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(password))
        {
            return null;
        }

        // 密码MD5加密（根据数据库中的密码格式，这里使用MD5）
        String encryptedPassword = DigestUtils.md5DigestAsHex(password.getBytes());

        // 查询用户信息
        MobileUser user = mobileUserMapper.selectMobileUserByPhoneAndPassword(phone, encryptedPassword);
        
        if (user != null)
        {
            // 检查用户状态
            if (user.getStatus() == null || user.getStatus() != 1)
            {
                return null; // 用户状态异常
            }
            
            // 检查是否被删除
            if (user.getDeleted() != null && user.getDeleted() == 1)
            {
                return null; // 用户已被删除
            }

            // 登录成功，不记录最后登录时间（表中无相应字段）
            
            // 清空密码字段，避免返回给前端
            user.setPassword(null);
        }

        return user;
    }

    /**
     * 查询手机端用户列表
     * 
     * @param mobileUser 手机端用户
     * @return 手机端用户
     */
    @Override
    public List<MobileUser> selectMobileUserList(MobileUser mobileUser)
    {
        return mobileUserMapper.selectMobileUserList(mobileUser);
    }

    /**
     * 新增手机端用户
     * 
     * @param mobileUser 手机端用户
     * @return 结果
     */
    @Override
    public int insertMobileUser(MobileUser mobileUser)
    {
        return mobileUserMapper.insertMobileUser(mobileUser);
    }

    /**
     * 修改手机端用户
     * 
     * @param mobileUser 手机端用户
     * @return 结果
     */
    @Override
    public int updateMobileUser(MobileUser mobileUser)
    {
        return mobileUserMapper.updateMobileUser(mobileUser);
    }

    /**
     * 批量删除手机端用户
     * 
     * @param ids 需要删除的手机端用户主键
     * @return 结果
     */
    @Override
    public int deleteMobileUserByIds(Integer[] ids)
    {
        return mobileUserMapper.deleteMobileUserByIds(ids);
    }

    /**
     * 删除手机端用户信息
     * 
     * @param id 手机端用户主键
     * @return 结果
     */
    @Override
    public int deleteMobileUserById(Integer id)
    {
        return mobileUserMapper.deleteMobileUserById(id);
    }

    /**
     * 验证用户支付密码
     * 
     * @param userId 用户ID
     * @param payPassword 支付密码
     * @return 验证结果，true表示验证成功，false表示验证失败
     */
    @Override
    public boolean verifyPayPassword(Integer userId, String payPassword)
    {
        // 参数校验
        if (userId == null || StringUtils.isEmpty(payPassword))
        {
            return false;
        }

        // 调用mapper验证支付密码
        MobileUser user = mobileUserMapper.verifyPayPassword(userId, payPassword);
        
        return user != null;
    }

    /**
     * 更新用户支付密码
     * 
     * @param userId 用户ID
     * @param payPassword 新的支付密码
     * @return 结果
     */
    @Override
    public int updatePayPassword(Integer userId, String payPassword)
    {
        // 参数校验
        if (userId == null || StringUtils.isEmpty(payPassword))
        {
            return 0;
        }

        return mobileUserMapper.updatePayPassword(userId, payPassword);
    }
}
